/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package it.azienda.moretti.modello;

import it.azienda.framework.modello.BeanBase;
import it.azienda.framework.persistenza.DAOConnectionSingleton;
import java.util.ArrayList;
import javax.faces.model.SelectItem;
import org.hibernate.Session;

/**
 *
 * @author Utente
 */
public class BeanPasseggero extends BeanBase {

    private Long id;
    private String nome;
    private String cognome;
    private String email;
    private String cellulare;
    private String note;
    private java.util.Date datanascita;
    private Double costoBiglietto;
    private BeanPrenotazione beanPrenotazione = new BeanPrenotazione();
    private BeanFasciaEta beanFasciaEta = new BeanFasciaEta();

    private Long idFascia;
    private SelectItem[] listaFasce;
    private Double tariffaApp;
    private BeanAppPrenotazione beanAppPrenotazione = new BeanAppPrenotazione();
    private String abordo = "N";

    /**
     * @return the id
     */
    public Long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the cognome
     */
    public String getCognome() {
        return cognome;
    }

    /**
     * @param cognome the cognome to set
     */
    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the cellulare
     */
    public String getCellulare() {
        return cellulare;
    }

    /**
     * @param cellulare the cellulare to set
     */
    public void setCellulare(String cellulare) {
        this.cellulare = cellulare;
    }

    /**
     * @return the note
     */
    public String getNote() {
        return note;
    }

    /**
     * @param note the note to set
     */
    public void setNote(String note) {
        this.note = note;
    }

    /**
     * @return the datanascita
     */
    public java.util.Date getDatanascita() {
        return datanascita;
    }

    /**
     * @param datanascita the datanascita to set
     */
    public void setDatanascita(java.util.Date datanascita) {
        this.datanascita = datanascita;
    }

    /**
     * @return the costoBiglietto
     */
    public Double getCostoBiglietto() {
        return costoBiglietto;
    }

    /**
     * @param costoBiglietto the costoBiglietto to set
     */
    public void setCostoBiglietto(Double costoBiglietto) {
        this.costoBiglietto = costoBiglietto;
    }

    /**
     * @return the beanFasciaEta
     */
    public BeanFasciaEta getBeanFasciaEta() {
        return beanFasciaEta;
    }

    /**
     * @param beanFasciaEta the beanFasciaEta to set
     */
    public void setBeanFasciaEta(BeanFasciaEta beanFasciaEta) {
        this.beanFasciaEta = beanFasciaEta;
    }

    /**
     * @return the idFascia
     */
    public Long getIdFascia() {
        return idFascia;
    }

    /**
     * @param idFascia the idFascia to set
     */
    public void setIdFascia(Long idFascia) {
        this.idFascia = idFascia;
    }

    /**
     * @return the listaFasce
     */
    public SelectItem[] getListaFasce() {

        try {
            String query = "select bean.descrizione, bean.id"
                    + "  from BeanFasciaEta bean "
                    + " order by bean.standard desc";
            Session sessione = DAOConnectionSingleton.newSession();
            ArrayList lista = (ArrayList) sessione.createQuery(query).list();

            listaFasce = new SelectItem[lista.size()];
            for (int i = 0; i < lista.size(); i++) {
                Object[] obj = (Object[]) lista.get(i);
                listaFasce[i] = new SelectItem(new Long(obj[1].toString()), obj[0].toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return listaFasce;
    }

    /**
     * @param listaFasce the listaFasce to set
     */
    public void setListaFasce(SelectItem[] listaFasce) {
        this.listaFasce = listaFasce;
    }

    /**
     * @return the beanPrenotazione
     */
    public BeanPrenotazione getBeanPrenotazione() {
        return beanPrenotazione;
    }

    /**
     * @param beanPrenotazione the beanPrenotazione to set
     */
    public void setBeanPrenotazione(BeanPrenotazione beanPrenotazione) {
        this.beanPrenotazione = beanPrenotazione;
    }

    /**
     * @return the beanPrenotazione
     */
    public BeanAppPrenotazione getBeanAppPrenotazione() {
        return beanAppPrenotazione;
    }

    /**
     * @param beanPrenotazione the beanPrenotazione to set
     */
    public void setBeanAppPrenotazione(BeanAppPrenotazione beanAppPrenotazione) {
        this.beanAppPrenotazione = beanAppPrenotazione;
    }

    /**
     * @return the tariffaApp
     */
    public Double getTariffaApp() {
        try {
            if (this.idFascia != null && this.beanAppPrenotazione != null) {

                if (this.beanAppPrenotazione.getCorsaAndata() != null) {
                    String query = "select bean from BeanBigliettoTratta bean"
                            + " where bean.beanFasciaEta.id = :idFascia"
                            + " and bean.beanTratta.id = :idTratta";
                    Session sessione = DAOConnectionSingleton.newSession();
                    BeanBigliettoTratta bean = (BeanBigliettoTratta) sessione.createQuery(query)
                            .setLong("idFascia", this.idFascia)
                            .setLong("idTratta", this.beanAppPrenotazione.getCorsaAndata().getBeanTratta().getId())
                            .uniqueResult();
                    if (bean != null) {
                        if (this.beanAppPrenotazione.getAr().equals("A")) {
                            this.tariffaApp = bean.getBigliettoS();
                        } else {
                            this.tariffaApp = bean.getBigliettoAR();
                        }
                    }
                }

                if (this.beanAppPrenotazione.getCorsaRitorno() != null) {
                    if (this.beanAppPrenotazione.getCorsaRitorno().getId() != null) {

                        String query = "select bean from BeanBigliettoTratta bean"
                                + " where bean.beanFasciaEta.id = :idFascia"
                                + " and bean.beanTratta.id = :idTratta";
                        Session sessione = DAOConnectionSingleton.newSession();
                        BeanBigliettoTratta bean = (BeanBigliettoTratta) sessione.createQuery(query)
                                .setLong("idFascia", this.idFascia)
                                .setLong("idTratta", this.beanAppPrenotazione.getCorsaRitorno().getBeanTratta().getId())
                                .uniqueResult();
                        if (bean != null) {
                            if (this.beanAppPrenotazione.getAr().equals("A")) {
                                this.tariffaApp += bean.getBigliettoS();
                            } else {
                                this.tariffaApp += bean.getBigliettoAR();
                            }
                        }
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return tariffaApp;
    }

    /**
     * @param tariffaApp the tariffaApp to set
     */
    public void setTariffaApp(Double tariffaApp) {
        this.tariffaApp = tariffaApp;
    }

    /**
     * @return the abordo
     */
    public String getAbordo() {
        return abordo;
    }

    /**
     * @param abordo the abordo to set
     */
    public void setAbordo(String abordo) {
        this.abordo = abordo;
    }

}
